/**
 *
 */
package com.rf.richfitwheel.workflow.service;

import com.rf.richfitwheel.admin.sys.vo.UserVO;
import com.rf.richfitwheel.common.utils.PageUtils;
import com.rf.richfitwheel.workflow.entity.WfTaskParam;
import com.rf.richfitwheel.workflow.entity.WfTaskVo;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.task.Task;

import java.util.List;
import java.util.Map;

/**
 * 工作流任务相关接口
 * @author hushouquan
 *
 */
public interface WfTaskService {

    /**
     * 流程提交方法
     * @param params 参数
     * @param user 操作人
     * @return
     */
    WfTaskParam submitTask(WfTaskParam params, UserVO user) throws Exception;
    WfTaskParam submitTaskForMq(WfTaskParam params, UserVO user) throws Exception;

    /**
     * 我的待办流程
     * @param params
     * @param user
     * @return
     */
    PageUtils getToDoList(Map<String, Object> params, UserVO user);


    List<Map<String, Object>> getCanRecallTasks(String processInstanceId, UserVO user);


    List<Task> getTaskByProcessInstanceIdAndUserId(String id, String id1);

    WfTaskVo getWfTaskVoByBusinesskey(String businessKey, UserVO user);

    List<WfTaskVo> findTodoTask(UserVO user, PageUtils pageUtils, Map<String, Object> params);

    String getFileIdByTaskId(String taskId);

    boolean checkByBusinessKey(String businessKey, UserVO user);
    
    /**
     * 委托办理
     * @param taskId 任务id
     * @param userId 被委托人
     */
    void delegateTask(String taskId, String userId);
    
    /**
     * 根据任务id获取任务信息
     *
     * @param taskId 任务id
     * @return 任务信息
     */
    WfTaskVo getTaskInfoById(String taskId);
    
    /**
     * 根据流程实例id获取任务信息
     * @param processInstanceId 流程实例id
     * @return 流程实例信息
     */
    Map<String, Object> getProcessInstanceById(String processInstanceId);
    
    /**
     * 根据任务id查询节点是否需要ukey
     * @param taskId 任务id
     * @return needKey
     */
    Map<String, String> getTaskNeedKey(String taskId);
    
    /**
     * 查询第一个节点是否需要ukey
     * @param folderCode 流程目录编码
     * @param orgCode 机构编码
     * @return needKey
     */
    String getTaskNeedKeyFirst(String folderCode, String orgCode);
    
    /**
     * 获取首节点信息
     * @param processDefinitionId 流程定义id
     * @return 流程首节点信息
     */
    public UserTask getFirstUserTaskDef(String processDefinitionId);

    /**
     * 批量查询节点是否需要ukey
     * @param taskIdArr 任务id
     * @return map
     */
    Map<String, Map<String, String>> getTaskNeedKeyBatch(String[] taskIdArr);
}
